# 地区时间格式转换器

class TimeFormatter:
    """
    时间格式转换器类，支持8个国家的时间格式转换
    """
    
    # 定义各国家/地区的时间格式
    FORMAT_TEMPLATES = {
        '中国': '{year}年{month:02d}月{day:02d}日 {hour:02d}:{minute:02d}:{second:02d}',
        '美国': '{month:02d}/{day:02d}/{year} {hour:02d}:{minute:02d}:{second:02d}',
        '英国': '{day:02d}/{month:02d}/{year} {hour:02d}:{minute:02d}:{second:02d}',
        '德国': '{day:02d}.{month:02d}.{year} {hour:02d}:{minute:02d}:{second:02d}',
        '俄罗斯': '{day:02d}.{month:02d}.{year} {hour:02d}:{minute:02d}:{second:02d}',
        '澳大利亚': '{day:02d}/{month:02d}/{year} {hour:02d}:{minute:02d}:{second:02d}',
        '法国': '{day:02d}/{month:02d}/{year} {hour:02d}:{minute:02d}:{second:02d}',
        '加拿大': '{year}-{month:02d}-{day:02d} {hour:02d}:{minute:02d}:{second:02d}'
    }
    
    # 每月天数表（非闰年）
    DAYS_IN_MONTH = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    
    @staticmethod
    def is_leap_year(year):
        """
        判断是否为闰年
        
        Args:
            year: 年份
            
        Returns:
            bool: 是否为闰年
        """
        return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
    
    @classmethod
    def validate_date(cls, year, month, day):
        """
        验证日期是否有效
        
        Args:
            year: 年份
            month: 月份
            day: 日期
            
        Raises:
            ValueError: 当日期无效时抛出
        """
        # 验证年份
        if year < 1:
            raise ValueError("年份必须大于0")
        
        # 验证月份
        if month < 1 or month > 12:
            raise ValueError("月份必须在1-12之间")
        
        # 验证日期
        max_days = cls.DAYS_IN_MONTH[month]
        # 闰年2月有29天
        if month == 2 and cls.is_leap_year(year):
            max_days = 29
        
        if day < 1 or day > max_days:
            raise ValueError(f"日期必须在1-{max_days}之间")
    
    @staticmethod
    def validate_time(hour, minute, second):
        """
        验证时间是否有效
        
        Args:
            hour: 小时
            minute: 分钟
            second: 秒
            
        Raises:
            ValueError: 当时间无效时抛出
        """
        if hour < 0 or hour > 23:
            raise ValueError("小时必须在0-23之间")
        if minute < 0 or minute > 59:
            raise ValueError("分钟必须在0-59之间")
        if second < 0 or second > 59:
            raise ValueError("秒必须在0-59之间")
    
    @classmethod
    def format_time(cls, year, month, day, hour, minute, second, region):
        """
        根据指定地区格式化时间
        
        Args:
            year: 年份
            month: 月份
            day: 日期
            hour: 小时
            minute: 分钟
            second: 秒
            region: 地区名称
            
        Returns:
            str: 格式化后的时间字符串
        """
        if region not in cls.FORMAT_TEMPLATES:
            raise ValueError(f"不支持的地区: {region}")
        
        template = cls.FORMAT_TEMPLATES[region]
        return template.format(
            year=year,
            month=month,
            day=day,
            hour=hour,
            minute=minute,
            second=second
        )
    
    @classmethod
    def get_supported_regions(cls):
        """
        获取支持的地区列表
        
        Returns:
            list: 支持的地区名称列表
        """
        return list(cls.FORMAT_TEMPLATES.keys())


def get_user_input():
    """
    获取用户输入的时间信息和地区
    
    Returns:
        tuple: (year, month, day, hour, minute, second, region)
    """
    print("===== 地区时间格式转换器 =====")
    print("支持的地区：")
    regions = TimeFormatter.get_supported_regions()
    for i, region in enumerate(regions, 1):
        print(f"{i}. {region}")
    
    # 获取并验证年份
    while True:
        try:
            year = int(input("请输入年份（例如：2024）: "))
            if year < 1:
                print("错误：年份必须大于0，请重新输入。")
                continue
            break
        except ValueError:
            print("错误：请输入有效的数字。")
    
    # 获取并验证月份
    while True:
        try:
            month = int(input("请输入月份（1-12）: "))
            if month < 1 or month > 12:
                print("错误：月份必须在1-12之间，请重新输入。")
                continue
            break
        except ValueError:
            print("错误：请输入有效的数字。")
    
    # 获取并验证日期
    while True:
        try:
            day = int(input("请输入日期（1-31）: "))
            # 验证日期的有效性，考虑闰年
            TimeFormatter.validate_date(year, month, day)
            break
        except ValueError as e:
            print(f"错误：{e}，请重新输入。")
    
    # 获取并验证小时
    while True:
        try:
            hour = int(input("请输入小时（0-23）: "))
            if hour < 0 or hour > 23:
                print("错误：小时必须在0-23之间，请重新输入。")
                continue
            break
        except ValueError:
            print("错误：请输入有效的数字。")
    
    # 获取并验证分钟
    while True:
        try:
            minute = int(input("请输入分钟（0-59）: "))
            if minute < 0 or minute > 59:
                print("错误：分钟必须在0-59之间，请重新输入。")
                continue
            break
        except ValueError:
            print("错误：请输入有效的数字。")
    
    # 获取并验证秒
    while True:
        try:
            second = int(input("请输入秒（0-59）: "))
            if second < 0 or second > 59:
                print("错误：秒必须在0-59之间，请重新输入。")
                continue
            break
        except ValueError:
            print("错误：请输入有效的数字。")
    
    # 获取并验证地区选择
    while True:
        try:
            region_index = int(input(f"请选择地区（1-{len(regions)}）: "))
            if region_index < 1 or region_index > len(regions):
                print(f"错误：请输入1-{len(regions)}之间的数字。")
                continue
            region = regions[region_index - 1]
            break
        except ValueError:
            print("错误：请输入有效的数字。")
    
    return year, month, day, hour, minute, second, region


def main():
    """
    主函数，运行时间格式转换器
    """
    try:
        # 获取用户输入
        year, month, day, hour, minute, second, region = get_user_input()
        
        # 再次验证时间（双重保障）
        TimeFormatter.validate_date(year, month, day)
        TimeFormatter.validate_time(hour, minute, second)
        
        # 格式化时间
        formatted_time = TimeFormatter.format_time(year, month, day, hour, minute, second, region)
        
        # 输出结果
        print(f"\n转换后的时间格式（{region}）: {formatted_time}")
        
    except ValueError as e:
        print(f"错误: {e}")
    except IndexError:
        print("错误: 无效的地区选择")
    except Exception as e:
        print(f"发生未知错误: {e}")
    finally:
        print("\n感谢使用时间格式转换器！")


if __name__ == "__main__":
    main()